#include "ModRunIterator.h"
#include <QDebug>

#include "../Output/FactoryOutput.h"


//迭代器模式的ModRun（Iterator）;
ModRunIterator::ModRunIterator()
{
    //模式名称;
    m_strModelName = "迭代器模式的（Iterator）;";
    //模式描述;
    m_strModelDesc = "迭代器模式:封装有规律的集合对象，并提供统一接口实现简单操作，隔离集合结构和对象接口；\n"
                     "如树状结构，队列，链表等\n\n"
                     "迭代器对象方式的缺点是：结构操作和对象本身接口未解耦，现在基本上都是STL模板的迭代器:\n"
                     "std::vector, std::list, std::map...此处没有演示代码，太常用了-_-!";
}

//初始化显示模式;
void ModRunIterator::InitDisplay()
{
    qDebug() << m_strModelName;
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateDescOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outList{ m_strModelName,m_strModelDesc};
        pOutPut->OutPut(outList);
    }
}

//返回模式类型;
EnumModRun ModRunIterator::GetEnum()
{
    return emModRunIterator;
}

//运行模式;
void ModRunIterator::ModRun()
{
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateRunOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outListStart{ "========迭代器模式 start:=======" };
        std::initializer_list<QString> outListEnd{ "========迭代器模式 end:=======" };
        pOutPut->OutPut(outListStart);

        //迭代器模式;
        //面向对象的迭代器模式，由于将对象和结构未解耦，基本已经被淘汰，现在都是STL类的迭代器;
        //这里就不做演示;
        //std::find, std::list, std::vector
        
        pOutPut->OutPut(outListEnd);
    }

}

InterFaceModRun* ModRunIterator::CreateMe()
{
    return new ModRunIterator();
}
